Videos:
https://open.fing.edu.uy/courses/fsi/10/
https://open.fing.edu.uy/courses/fsi/11/
https://open.fing.edu.uy/courses/fsi/12/
https://open.fing.edu.uy/courses/fsi/13/
https://open.fing.edu.uy/courses/fsi/14/
Diapositivas:
[[sistemas_operativos_introduccion.pdf]]
[[sistemas_operativos_unix.pdf]]
[[sistemas_operativos_windows_introduccion.pdf]]
[[sistemas_operativos_windows_acceso_1.pdf]]
[[sistemas_operativos_windows_acceso_2.pdf]]
Sistema Operativo: intermediario entre el hardware y los usuarios del sistema, encargado de realizar:
- la asignación eficiente de recursos entre los procesos o programas y usuarios del sistema
- proteger el sistema de programas (y usuarios) incorrectos o maliciosos
- mantener y proteger espacios de usuarios disjuntos o separados
- permitir a los usuarios el acceso a datos, programas y otros recursos
- ejecutar programas de usuarios
- optimizar la eficiencia total del sistema
- gestionar dispositivos de entrada y salida
Desde que el sistema inicia hasta que es apagado.
Recursos controlados y protegidos por el Sistema Operativo:
Se pueden aplicar a distintos niveles, por ejemplo:
rw
para el dueño, r
para el resto.
/bin/passwd
necesita SUID root para poder modificarlo.fork
o exec
.+
en /etc/passwdr
para el dueño, nada para el resto.
Los restantes campos están vacíos pues son valores por defecto.
'.'
, y un puntero a su padre, el archivo '..'
.read
, write
, y execute
, para el propietario, el grupo, y otros (resto del mundo).
777
da todos los accesos al dueño, grupo y mundo.mkdir
.-> Para ejecutar a/b/c.sh
, preciso permiso de ejecución en a
, a/b
y a/b/c.sh
.
Las contraseñas de los usuarios:
/bin/passwd
: cambio de contraseña/bin/login
: programa de login/bin/at
: ejecución de programas batch/bin/su
: cambiar el UID (switch User ID)Además, en un sistema operativo se necesita:
En Unix, todos los objetos son tratados uniformemente como recursos. Sin embargo en Windows, el control de acceso puede ser ajustado individualmente a los distintos tipos de objetos.
regedit.exe
o regedt32.exe
.HKEY_CLASSES_ROOT
asociación de extensiones de archivos.HKEY_CURRENT_USER
configuración del usuario actualmente logueado.HKEY_LOCAL_MACHINE
configuración de la computadora.HKEY_USERS
profiles de los usuarios cargados en el sistema.HKEY_CURRENT_CONFIG
profile del hardware del sistema usado por la computadora cuando se inicia.Entradas relevantes para la seguridad del sistema
HKEY_LOCAL_MACHINE/SAM
HKEY_LOCAL_MACHINE/Security
HKEY_LOCAL_MACHINE/Software
HKEY_CURRENT_CONFIG
HKEY_USERS/DEFAULT
Modificando el registro, un atacante puede modificar el comportamiento del sistema. Es necesario proteger la integridad del registro.
Un problema potencial es cuando una clave no está definida explícitamente, p.e.:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/SecurePipeServers/Winreg
Si NO existe la clave, se permite acceder remotamente al registro sin realizar chequeos!!
Definición: Colección de máquinas que comparten la base de cuentas de usuarios y políticas de seguridad.
username
, SID> (Security IDentifier).Formato:
Podemos ver información de los principals con los siguientes comandos:
Usuarios locales y aliases:
> net user
> net localgroup
Usuarios, grupos y aliases de dominio:
> net user /domain
> net group /domain
> net localgroup /domain
Miembros de un grupo:
> net group “UK Employees” /domain
Información de un usuario:
> net user diego /domain
También ver los SID de los usuarios de un equipo:
Correr regedt32.exe
y acceder a HKEY_USERS
.
winlogon.exe
y GINA DLL, iniciado por la secuencia de atención segura (CTRL+ALT+DEL).lsass.exe
, Local Security Authority).explorer.exe
).CreateProcess
.DELETE
: eliminar el objeto.READ_CONTROL
: acceso de lectura sobre el owner, group o DACL del security descriptor.WRITE_DAC
: acceso de escritura a la DACL.WRITE_OWNER
: permiso de escritura sobre dueño.GENERIC_READ
GENERIC_WRITE
GENERIC_EXECUTE
GENERIC_ALL
READ_CONTROL
y WRITE_DAC
.SeTakeOwnershipPrivilege
).INPUT
: el sujeto pidiendo acceso, el objeto al cual se quiere acceder y el tipo de acceso requerido (access mask).a. Si no hay DACL (NULL DACL), el acceso es otorgado.
(no es lo mismo que DACL vacío)
b. Si el sujeto es el dueño del objeto, entonces:
Si la access mask contiene Read_Control o Write_DAC:
el acceso es otorgado.
Sino:
se construye una “access mask” de permisos
otorgados o garantizados y se busca en las
ACE de la DACL.
c. Para cada ACE de la DACL se compara el SID del sujeto con el de la ACE, pudiéndose dar 3 casos:
1. La ACE no contiene un SID que corresponda,
entonces se saltea.
2. La ACE contiene un SID que corresponde y
especificando ACCESS DENIED, entonces se niega
el acceso y no se continúa el proceso.
3. La ACE contiene un SID que corresponde y
especificando ACCESS ALLOWED, entonces si la
access mask en la ACE, junto a las access mask
de todas las anteriores ACEs que matchearon,
contiene los permisos solicitados entonces se
permite el acceso y se termina, sino se continúa
buscando.
La regla de oro es que las ACEs negativas (access denied) toman precedencia sobre las positivas (access allowed), esto puede implementarse usando listas y colocando los DENY al inicio de la DACL. Esta es la forma de resolver conflictos en las ACE. #parcial
Windows Access controls pueden usarse de distinta forma:
Al crearse un nuevo objeto, se heredan del contenedor en el cual están.
USE_FOR_DENY_ONLY
.USE_FOR_DENY_ONLY
.BOOLEAN RestrictedAccessCheck (Acl: ACL, DesiredAccess : AccessMask, RestrictedToken : AccessToken)
if (AccessCheck(Acl, DesiredAccess, RestrictedToken.PrincipalSids) && (AccessCheck(Acl, DesiredAccess, RestrictedToken.RestrictedSids)
return SUCCESS;
else
return FAILURE;
Nuevo conjunto de security principals llamados integrity levels (IL) que se agregan a los Access Token y ACLs:
secedit.exe
command line utility (workgroup environment)Configuración especificada en archivos en /etc/pam.d
. Se hacen las comprobaciones en el orden en que están listadas.
required - Con este indicador de control, si el módulo tiene éxito, registra un éxito required y continúa comprobando los módulos siguientes. Si el módulo falla, y si éste es el primer fallo required, guarde el mensaje de error y continúe comprobando la pila. Si no es el primer fallo, siga comprobando la pila.
binding - Si el módulo tiene éxito y no ha fallado ningún módulo precedente marcado como required, omita los módulos restantes. Si se devuelve un fallo, registre un fallo required y continúe procesando la pila.
Es como required, pero marca el fin de la comprobación si es exitosa.
requisite - Con este indicador de control, si el módulo tiene éxito, se registra un éxito required y se continúa comprobando los módulos siguientes. Si el módulo falla, registra un fallo required, devuelve el mensaje de error del primer fallo required y omite cualquier comprobación adicional.
Es como required, pero marca el fin de la comprobación si falla.
optional - Con este indicador de control, si el módulo tiene éxito, registre un éxito optional y continúe comprobando la pila. Si el módulo falla, registre un fallo optional y continúe comprobando la pila.
No afecta el resultado final de la pila.
sufficient - Con esta bandera de control, si el módulo tiene éxito, y ningún módulo precedente que esté marcado como required ha fallado, entonces sáltese los módulos restantes. Si el módulo falla, registre un fallo de optional y continúe comprobando la pila.
Es como binding, pero los fallos no importan y se sigue.
Mitigación:
Desventajas:
Ventajas: